package com.qding.park.common.core.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @ClassName MethodCache
 * @Description TODO(业务使用的主缓存)
 * @author Administrator
 * @Date 2016年9月5日 下午6:16:40
 * @version 1.0.0
 * 如果在缓存中没有则执行业务方法，执行完之后再将值存入到缓存
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
@Documented
public @interface MethodCacheable {
	
	/**
	 * @Description (缓存过期时间，单位是秒,如果不添则不做限制　　此处可以为el表达式)
	 * @return
	 */
	String expire() default "";
	
	/**
	 * @Description (缓存的key  可以为el表达式)
	 * @return
	 */
	String key() default "";
	
	/**
	 * @Description (缓存开关  默认为打开状态)
	 * @return
	 */
	CACHESWITCH cacheSwitch() default CACHESWITCH.ON;
	
	/**
	 * @Description (作用类型  默认为先走缓存再走业务)
	 * @return
	 */
	SERVICETYPE serviceType() default SERVICETYPE.BEFORE;
	
	
	/**
	 * @Description (存储地点)
	 * @return
	 */
	STORAGE_LOCATION_ENUM  storageLocation()  default STORAGE_LOCATION_ENUM.PLANE;
	
	
	/**
	 * @Description (hash  存储中的　　hash key)
	 * @return
	 */
	String   hashKey() default "";
	
//	/**
//	 * @ClassName STORAGE_LOCATION
//	 * @Description TODO(存储地点  hash  set list 等)
//	 * @author Administrator
//	 * @Date 2016年10月15日 下午9:02:57
//	 * @version 1.0.0
//	 */
//	public enum STORAGE_LOCATION{
//		
//		/**
//		 * @Field @PLANE : TODO(平面存储)
//		 */
//		PLANE,
//		/**
//		 * @Field @HASH : TODO(HASH 存储)
//		 */
//		HASH;
//	}
	
	
	/**
	 * @ClassName SERVICETYPE
	 * @Description TODO(缓存的业务类型)
	 * @author Administrator
	 * @Date 2016年9月5日 下午6:33:22
	 * @version 1.0.0
	 * 
	 */
	public enum SERVICETYPE{
		
		/**
		 * @Field @NULL : TODO(直接走缓存，不走业务)
		 */
		NULL,
		/**
		 * @Field @BEFORE : TODO(先走缓存再走业务)
		 */
		BEFORE,
		/**
		 * @Field @AFTER : TODO(先走业务再走缓存)
		 */
		AFTER
		
	};
	
	public enum CACHESWITCH{
		/**
		 * @Field @OFF : TODO(关)
		 */
		OFF,
		/**
		 * @Field @ON : TODO(开)
		 */
		ON;
	}
	
	
}
